package design.mode.prototype;

import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;


/**
 * 任何时刻，系统 A 中的所有数据都必须是同一个版本的，要么都是版本 a，要么都是版本 b，不能有的是版本 a，有的是版本 b。
 * <p>
 * 当我们要更新内存中的数据的时候，我们并不是直接在服务版本（假设是版本 a 数据）上更新，
 * 而是重新创建另一个版本数据（假设是版本 b 数据），等新的版本数据建好之后，
 * 再一次性地将服务版本从版本 a 切换到版本 b。
 * 这样既保证了数据一直可用，又避免了中间状态的存在。
 */

public class Demo2 {

    private HashMap<String, SearchWord> currentKeywords = new HashMap<>();

    public void refresh() {
        HashMap<String, SearchWord> newKeywords = new LinkedHashMap<>();

        List<SearchWord> toBeUpdatedSearchWords = getSearchWords();
        for (SearchWord searchWord : toBeUpdatedSearchWords) {
            newKeywords.put(searchWord.getKeyWord(), searchWord);
        }
    }

    private List<SearchWord> getSearchWords() {
        return Collections.emptyList();
    }

    class SearchWord {
        private long lastUpdateTime;

        private String keyWord;

        public long getLastUpdateTime() {
            return lastUpdateTime;
        }

        public void setLastUpdateTime(long lastUpdateTime) {
            this.lastUpdateTime = lastUpdateTime;
        }

        public String getKeyWord() {
            return keyWord;
        }

        public void setKeyWord(String keyWord) {
            this.keyWord = keyWord;
        }
    }
}
